package com.rejuvee.myloginapplication.ui.login.vm;

import androidx.annotation.NonNull;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;

import com.rejuvee.myloginapplication.data.LoginDataSource;
import com.rejuvee.myloginapplication.data.LoginRepository;

/**
 * ViewModel提供程序工厂来实例化LoginViewModel
 * <p>
 * 给定LoginViewModel必须有一个非空的构造函数
 */
public class LoginViewModelFactory implements ViewModelProvider.Factory {

    @NonNull
    @Override
    @SuppressWarnings("unchecked")
    public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
        // 判定此 modelClass 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同，或是否是其超类或超接口。如果是则返回 true
        if (modelClass.isAssignableFrom(LoginViewModel.class)) {
            return (T) new LoginViewModel(LoginRepository.getInstance(new LoginDataSource()));
        } else {
            throw new IllegalArgumentException("Unknown ViewModel class");
        }
    }
}